<?php
namespace Common\Controller;
use Think\Controller;
use Think\View;

import('Common.Lib.IndepControllerTrait');
/**
 * 组件基础控制器
 * 所有的组件必须继承该类 否则达不到预期效果
 * Class WidgetController
 * @package Common\Controller
 */
abstract class WidgetController extends Controller {

    use \IndepControllerTrait;
    protected $basePath = APP_PATH;
    protected static $loaded_src = [];
    public function _initialize(){
        $this->view = new View(); // 保证每个组件间的变量都保持独立 应该尽可能不使用静态进行缓存实例
    }
    /**
     * 空操作逻辑重写
     * 魔术方法 有不存在的操作的时候执行
     * @access public
     * @param string $method 方法名
     * @param array $args 参数
     * @return mixed
     */
    public function __call($method,$args) {
        if(method_exists($this,'_empty')) {
            // 如果定义了_empty操作 则调用
            $this->_empty($method,$args);
        }else{
            E(L('_ERROR_ACTION_').':'.$method);
        }
    }

    public function assets($src=[], $src_var='src') {
        if(is_array($src)) {
            foreach ($src as $k=>$r) {
                if(array_search($r, self::$loaded_src)===false) {
                    self::$loaded_src[] = $r;
                }else {
                    unset($src[$k]);
                }
            }
            $src = implode('', $src);
        }
        if(!$src) return '';
        $view = new View();
        $html = $view->fetch('', $src);
        if($src_var) $this->assign($src_var, $html);
        return $html;
    }
}